
//2434.使用机器人打印字典序最小的字符串
class Solution {
public:
    string robotWithString(string s) {
        vector<int> ch(26);  //存放s中各个字符的个数
        int n=s.size();

        auto get_min=[&]()->char   //获取s中剩余字符串的最小值
        {
            for(int i=0;i<26;i++)
            if(ch[i]>0) return 'a'+i;

            return '0';
        };
        for(auto e:s) ch[e-'a']++;   //将s中的字符串存储起来

        string ret,t;
        for(int i=0;i<n;i++)
        {
            t.push_back(s[i]);   //将当前字符从s中加入到t中
            ch[s[i]-'a']--;

            while(t.size()&&t.back()<=get_min())  //如果t栈顶的元素小于等于s剩余元素,则可以直接出了
            {
                ret.push_back(t.back());
                t.pop_back();
            }
        }

        while(t.size())   //将t中剩余的字符加入到答案中
        {
            ret.push_back(t.back());
            t.pop_back();
        }
        return ret;
    }
};